package savet.entidades.atributos;

import java.io.Serializable;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.LinkedList;
import java.util.List;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Transient;
import savet.entidades.Trabalhador;

@Entity
@Table
public class ASOS implements Serializable {

    public static final long serialVersionUID = 6L;
    @Id
    private Long id;
    @OneToMany
    private List<AtributoData> atributosData = new LinkedList<AtributoData>();
    @Transient
    private Trabalhador trabalhador;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public List<AtributoData> getAtributosData() {
        return atributosData;
    }

    public void setAtributosData(List<AtributoData> atributosData) {

//            System.out.println("Trabalhador fim do periodo aquisitivo:" + calendar.getTime());
        for (AtributoData atributoData : atributosData) {
            GregorianCalendar admissaoTrab = new GregorianCalendar();
            GregorianCalendar afastamentoTrab = new GregorianCalendar();


            if (trabalhador.getAdmissao() != null && trabalhador.getAfastamento() == null) {
                admissaoTrab.setTime(trabalhador.getAdmissao());
                GregorianCalendar atrib = new GregorianCalendar();
                atrib.setTime(atributoData.getData());

                if (atrib.get(Calendar.YEAR) == admissaoTrab.get(Calendar.YEAR)
                        && atrib.get(Calendar.MONTH) == admissaoTrab.get(Calendar.MONTH)) {

                    atributoData.setText("AD");

                } else {
                    atributoData.setEstado(Atributo.NAO_OBRIGATORIO);
                }

            } else if (trabalhador.getAdmissao() == null && trabalhador.getAfastamento() != null) {
                afastamentoTrab.setTime(trabalhador.getAfastamento());
                GregorianCalendar atrib = new GregorianCalendar();
                atrib.setTime(atributoData.getData());

                if (atrib.get(Calendar.YEAR) == afastamentoTrab.get(Calendar.YEAR)
                        && atrib.get(Calendar.MONTH) == afastamentoTrab.get(Calendar.MONTH)) {

                    atributoData.setText("DE");

                } else {
                    atributoData.setEstado(Atributo.NAO_OBRIGATORIO);
                }

            } else if (trabalhador.getAdmissao() != null && trabalhador.getAfastamento() != null) {
                admissaoTrab.setTime(trabalhador.getAdmissao());
                afastamentoTrab.setTime(trabalhador.getAfastamento());
                GregorianCalendar atrib = new GregorianCalendar();
                atrib.setTime(atributoData.getData());

                if (atrib.get(Calendar.YEAR) == admissaoTrab.get(Calendar.YEAR)
                        && atrib.get(Calendar.MONTH) == admissaoTrab.get(Calendar.MONTH)) {
                    atributoData.setText("AD");
                } else if (atrib.get(Calendar.YEAR) == afastamentoTrab.get(Calendar.YEAR)
                        && atrib.get(Calendar.MONTH) == afastamentoTrab.get(Calendar.MONTH)) {
                    atributoData.setText("DE");
                } else {
                    atributoData.setEstado(Atributo.NAO_OBRIGATORIO);
                }
            }
        }
        
        this.atributosData = atributosData;
    }

    public Trabalhador getTrabalhador() {
        return trabalhador;
    }

    public void setTrabalhador(Trabalhador trabalhador) {
        this.trabalhador = trabalhador;
    }
}
